---
title: Determine maximum premium-history set ID
summary: Determines the current premium-history set ID for a policy period, filtered to specific premium-history type codes.
status: draft
owner: SAIF Claims BOF team
last_reviewed: 2026-08-21
library: SAIF.Business.Policy
reference_type: embedded
operation_id: OP-POL-006
trigger: Caller reads PolicyInformation.MaxPremiumHistorySetId
---

# Determine maximum premium-history set ID

Determines the maximum premium-history set ID for a policy period, restricted to premium-history type codes `1` and `3`, with a `DBNull` guard defaulting to `0`.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-POL-006 |
| **Trigger** | Caller reads `PolicyInformation.MaxPremiumHistorySetId(inDPI, inPolicyNumber, inPolicyPeriodEffectiveDate)` |
| **Inputs** | Data portal info, policy number, policy-period effective date |
| **Outputs** | Decimal (0 if no matching row) |
| **Primary components** | `PolicyInformation.MaxPremiumHistorySetId` |
| **Entry point** | `SAIF.Business.Policy\PolicyInformation.vb` |

## Steps

1. Caller reads `PolicyInformation.MaxPremiumHistorySetId(inDPI, inPolicyNumber, inPolicyPeriodEffectiveDate)`.
2. Inline scalar SQL ([SQL-009](../sql/SQL-009-max-premium-history-set-id.md)) is executed against [PREM_HIST_SUMMARY](../database-tables.md#prem_hist_summary), filtered by policy number, period effective date, and `PREM_HIST_TYPE_CODE IN ('1','3')`.
3. `DPI.ProcessPortalRequest` executes.
   - If the result is `DBNull`: returns `0`.
   - Otherwise: returns the decimal value.

## Process flow

```mermaid
flowchart TD
	Start([MaxPremiumHistorySetId read]) --> S1[Build scalar request with SQL-009]
	S1 --> S2[Bind PolicyNumber and PolicyPeriodEffectiveDate]
	S2 --> S3[DPI.ProcessPortalRequest executes]
	S3 --> D{Result is DBNull?}
	D -->|Yes| EndZero([Return 0])
	D -->|No| EndVal([Return decimal value])
```

## Failure and edge-case behavior
- Unlike several sibling `PolicyInformation` properties, this operation correctly guards against `DBNull`, returning `0` instead of raising a cast exception.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

## Sources
- `SAIF.Business.Policy\PolicyInformation.vb`
